package com.dimples.dd.system.model.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.dimples.dd.common.enums.CommonStatusEnum;
import com.dimples.dd.mybatis.core.dataobject.BaseDO;
import com.dimples.dd.system.enums.permission.DataScopeEnum;
import com.dimples.dd.system.enums.permission.RoleTypeEnum;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 角色信息表
 */
@Schema(description = "角色信息表")
@Data
@EqualsAndHashCode(callSuper = true)
@TableName(value = "system_role")
public class SystemRoleDO extends BaseDO {
    /**
     * 角色ID
     */
    @TableId(value = "id", type = IdType.AUTO)
    @Schema(description = "角色ID")
    private Long id;

    /**
     * 角色名称
     */
    @TableField(value = "`name`")
    @Schema(description = "角色名称")
    private String name;

    /**
     * 角色权限字符串
     */
    @TableField(value = "code")
    @Schema(description = "角色权限字符串")
    private String code;

    /**
     * 显示顺序
     */
    @TableField(value = "sort")
    @Schema(description = "显示顺序")
    private Integer sort;

    /**
     * 数据范围（1：全部数据权限 2：自定数据权限 3：本部门数据权限 4：本部门及以下数据权限）
     * <p>
     * {@link DataScopeEnum}
     */
    @TableField(value = "data_scope")
    @Schema(description = "数据范围（1：全部数据权限 2：自定数据权限 3：本部门数据权限 4：本部门及以下数据权限）")
    private Byte dataScope;

    /**
     * 数据范围(指定部门数组)
     * <p>
     * 适用于 {@link #dataScope} 的值为 {@link DataScopeEnum#DEPT_CUSTOM} 时
     */
    @TableField(value = "data_scope_dept_ids")
    @Schema(description = "数据范围(指定部门数组)")
    private String dataScopeDeptIds;

    /**
     * 角色状态（0正常 1停用）
     * <p>
     * {@link CommonStatusEnum}
     */
    @TableField(value = "`status`")
    @Schema(description = "角色状态（0正常 1停用）")
    private Byte status;

    /**
     * 角色类型
     * <p>
     * 枚举 {@link RoleTypeEnum}
     */
    @TableField(value = "`type`")
    @Schema(description = "角色类型")
    private Byte type;

    /**
     * 备注
     */
    @TableField(value = "remark")
    @Schema(description = "备注")
    private String remark;

    /**
     * 租户编号
     */
    @TableField(value = "tenant_id")
    @Schema(description = "租户编号")
    private Long tenantId;
}